<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js coal">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title>PHP cheatsheet - Andrew&#x27;s Blog</title>


        <!-- Custom HTML head -->
        
        <meta name="description" content="Andrew Ryan&#x27;s Blog">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff" />

        <link rel="icon" href="../../favicon.svg">
        <link rel="shortcut icon" href="../../favicon.png">
        <link rel="stylesheet" href="../../css/variables.css">
        <link rel="stylesheet" href="../../css/general.css">
        <link rel="stylesheet" href="../../css/chrome.css">

        <!-- Fonts -->
        <link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
        <link rel="stylesheet" href="../../fonts/fonts.css">

        <!-- Highlight.js Stylesheets -->
        <link rel="stylesheet" href="../../highlight.css">
        <link rel="stylesheet" href="../../tomorrow-night.css">
        <link rel="stylesheet" href="../../ayu-highlight.css">

        <!-- Custom theme stylesheets -->
        <link rel="stylesheet" href="../../src/style/custom.css">

        <!-- MathJax -->
        <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    </head>
    <body>
    <div id="body-container">
        <!-- Provide site root to javascript -->
        <script>
            var path_to_root = "../../";
            var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "coal" : "coal";
        </script>

        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script>
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script>
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
            if (theme === null || theme === undefined) { theme = default_theme; }
            var html = document.querySelector('html');
            html.classList.remove('no-js')
            html.classList.remove('coal')
            html.classList.add(theme);
            html.classList.add('js');
        </script>

        <!-- Hide / unhide sidebar before it is displayed -->
        <script>
            var html = document.querySelector('html');
            var sidebar = null;
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            } else {
                sidebar = 'hidden';
            }
            html.classList.remove('sidebar-visible');
            html.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <div class="sidebar-scrollbox">
                <ol class="chapter"><li class="chapter-item affix "><a href="../../index.html">Andrew's Blog</a></li><li class="chapter-item "><a href="../../posts/linux/linux.html"><strong aria-hidden="true">1.</strong> Linux</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/linux/install_linux.html"><strong aria-hidden="true">1.1.</strong> install linux</a></li><li class="chapter-item "><a href="../../posts/linux/bash_profile.html"><strong aria-hidden="true">1.2.</strong> bash profile</a></li><li class="chapter-item "><a href="../../posts/linux/command_list.html"><strong aria-hidden="true">1.3.</strong> command list</a></li><li class="chapter-item "><a href="../../posts/linux/git_guide.html"><strong aria-hidden="true">1.4.</strong> git guide</a></li><li class="chapter-item "><a href="../../posts/linux/tar.html"><strong aria-hidden="true">1.5.</strong> tar</a></li><li class="chapter-item "><a href="../../posts/Linux/git_cheatsheet.html"><strong aria-hidden="true">1.6.</strong> Git Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/Linux/bash_cheatsheet.html"><strong aria-hidden="true">1.7.</strong> Bash Cheatsheet</a></li></ol></li><li class="chapter-item "><a href="../../posts/macos/mac.html"><strong aria-hidden="true">2.</strong> MacOS</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/macos/macos_profiles.html"><strong aria-hidden="true">2.1.</strong> macos profiles</a></li><li class="chapter-item "><a href="../../posts/macos/macos_pwn_env_setup.html"><strong aria-hidden="true">2.2.</strong> macos pwn env setup</a></li></ol></li><li class="chapter-item "><a href="../../posts/swift/swift.html"><strong aria-hidden="true">3.</strong> Swift</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/swift/learn_swift.html"><strong aria-hidden="true">3.1.</strong> learn swift basics</a></li><li class="chapter-item "><a href="../../posts/swift/swift_extensions.html"><strong aria-hidden="true">3.2.</strong> Swift extensions</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_extension.html"><strong aria-hidden="true">3.3.</strong> SwiftUI extensions</a></li><li class="chapter-item "><a href="../../posts/swift/install_swift.html"><strong aria-hidden="true">3.4.</strong> install swift</a></li><li class="chapter-item "><a href="../../posts/swift/task_planner.html"><strong aria-hidden="true">3.5.</strong> implment task panner app with SwiftUI</a></li><li class="chapter-item "><a href="../../posts/swift/swift_cheat_sheet.html"><strong aria-hidden="true">3.6.</strong> Swift Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/swift/yinci_url.html"><strong aria-hidden="true">3.7.</strong> Personal privacy protocol</a></li><li class="chapter-item "><a href="../../posts/swift/swift_regular_exressions.html"><strong aria-hidden="true">3.8.</strong> Swift regular exressions</a></li><li class="chapter-item "><a href="../../posts/ios/how_to_create_beautiful_ios_charts_in_swift.html"><strong aria-hidden="true">3.9.</strong> How to Create Beautiful iOS Charts in Swift</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_source_code.html"><strong aria-hidden="true">3.10.</strong> SwiftUI source code</a></li><li class="chapter-item "><a href="../../posts/swift/use_swift_fetch_iciba_api.html"><strong aria-hidden="true">3.11.</strong> use swift fetch iciba API</a></li></ol></li><li class="chapter-item "><a href="../../posts/ios/ios.html"><strong aria-hidden="true">4.</strong> iOS</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ios/cocaposd_setup_and_install_for_ios_project.html"><strong aria-hidden="true">4.1.</strong> cocaposd setup and install for ios project</a></li><li class="chapter-item "><a href="../../posts/ios/swiftui_show_gif_image.html"><strong aria-hidden="true">4.2.</strong> SwiftUI show gif image</a></li><li class="chapter-item "><a href="../../posts/ios/implement_task_planner_app.html"><strong aria-hidden="true">4.3.</strong> implement Task planner App</a></li></ol></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c.html"><strong aria-hidden="true">5.</strong> Objective-C</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/objective_c/objective_c_cheat_sheet.html"><strong aria-hidden="true">5.1.</strong> Objective-C Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c_for_absolute_beginners_read_note.html"><strong aria-hidden="true">5.2.</strong> Objective-C Note</a></li></ol></li><li class="chapter-item "><a href="../../posts/dart/dart.html"><strong aria-hidden="true">6.</strong> Dart</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/dart/flutter.html"><strong aria-hidden="true">6.1.</strong> Flutter Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/dart/dart_cheat_sheet.html"><strong aria-hidden="true">6.2.</strong> Dart Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/flutter/flutter_dev_test.html"><strong aria-hidden="true">6.3.</strong> Flutter dev test</a></li></ol></li><li class="chapter-item "><a href="../../posts/rust/rust.html"><strong aria-hidden="true">7.</strong> Rust</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/rust/offline_use_rust.html"><strong aria-hidden="true">7.1.</strong> Offline use rust</a></li><li class="chapter-item "><a href="../../posts/rust/rust_grammer.html"><strong aria-hidden="true">7.2.</strong> rust grammar</a></li><li class="chapter-item "><a href="../../posts/rust/pase_string_and_decimal_conversion.html"><strong aria-hidden="true">7.3.</strong> pase string and decimal conversion</a></li><li class="chapter-item "><a href="../../posts/rust/parse_types.html"><strong aria-hidden="true">7.4.</strong> rust types</a></li><li class="chapter-item "><a href="../../posts/rust/rust_life_cycle.html"><strong aria-hidden="true">7.5.</strong> Rust life cycle</a></li><li class="chapter-item "><a href="../../posts/rust/rust_generic.html"><strong aria-hidden="true">7.6.</strong> rust generics</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implment_matrix.html"><strong aria-hidden="true">7.7.</strong> Rust implement matrix</a></li><li class="chapter-item "><a href="../../posts/rust/rust_sort.html"><strong aria-hidden="true">7.8.</strong> Rust implement sort algorithms</a></li><li class="chapter-item "><a href="../../posts/rust/implement_aes_encryption.html"><strong aria-hidden="true">7.9.</strong> Rust implement AEC encryption and decryption</a></li><li class="chapter-item "><a href="../../posts/rust/implement_trie_data_structure.html"><strong aria-hidden="true">7.10.</strong> implement trie data structure</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_tree.html"><strong aria-hidden="true">7.11.</strong> implement tree data_structure</a></li><li class="chapter-item "><a href="../../posts/rust/list_dir.html"><strong aria-hidden="true">7.12.</strong> list dir</a></li><li class="chapter-item "><a href="../../posts/rust/fast_way_to_implment_object_trait.html"><strong aria-hidden="true">7.13.</strong> fast way to implment object trait</a></li><li class="chapter-item "><a href="../../posts/rust/compress_rust_binary_size.html"><strong aria-hidden="true">7.14.</strong> compress rust binary size</a></li><li class="chapter-item "><a href="../../posts/rust/implment_file_upload_backend.html"><strong aria-hidden="true">7.15.</strong> impliment file upload</a></li><li class="chapter-item "><a href="../../posts/rust/this_is_add_post_cli_implementation_in_rust.html"><strong aria-hidden="true">7.16.</strong> this is add_post cli implementation in rust</a></li><li class="chapter-item "><a href="../../posts/rust/use_rust_implment_a_copyclipbord_cli.html"><strong aria-hidden="true">7.17.</strong> Use rust implment a copyclipbord CLI</a></li><li class="chapter-item "><a href="../../posts/rust/sqlite_database_add_delete_update_show_in_rust.html"><strong aria-hidden="true">7.18.</strong> sqlite database add delete update show in rust</a></li><li class="chapter-item "><a href="../../posts/rust/implementing_tokio_joinhandle_for_wasm.html"><strong aria-hidden="true">7.19.</strong> Implementing tokio JoinHandle for wasm</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_a_crate_for_encode_and_decode_brainfuck_and_ook.html"><strong aria-hidden="true">7.20.</strong> rust implement a crate for encode and decode brainfuck and ook</a></li><li class="chapter-item "><a href="../../posts/rust/slint_builtin_elements.html"><strong aria-hidden="true">7.21.</strong> Slint Builtin Elements</a></li><li class="chapter-item "><a href="../../posts/rust/corporate_network_install_rust_on_windows.html"><strong aria-hidden="true">7.22.</strong> Corporate network install Rust on windows</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_file_how_to_judge_static_link_or_dynamic_link_in_macos.html"><strong aria-hidden="true">7.23.</strong> rust binary file how to judge static link or dynamic link in Macos</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_include_dir_and_get_contents.html"><strong aria-hidden="true">7.24.</strong> rust binary include dir and get contents</a></li><li class="chapter-item "><a href="../../posts/rust/how_to_create_yolov8_based_object_detection_web_service_using_python,_julia,_node.js,_javascript,_go_and_rust.html"><strong aria-hidden="true">7.25.</strong> How to create YOLOv8-based object detection web service using Python, Julia, Node.js, JavaScript, Go and Rust</a></li><li class="chapter-item "><a href="../../posts/rust/implment_builder_proc_macro_for_command_struct.html"><strong aria-hidden="true">7.26.</strong> implment Builder proc-macro for Command struct</a></li></ol></li><li class="chapter-item "><a href="../../posts/java/java.html"><strong aria-hidden="true">8.</strong> Java</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/java/java_grammar.html"><strong aria-hidden="true">8.1.</strong> java grammar and codewar</a></li><li class="chapter-item "><a href="../../posts/java/run_jar.html"><strong aria-hidden="true">8.2.</strong> java run .jar</a></li><li class="chapter-item "><a href="../../posts/java/java_pomxml_add_defaultgoal_to_build.html"><strong aria-hidden="true">8.3.</strong> Java pomxml add defaultGoal to build</a></li><li class="chapter-item "><a href="../../posts/java/java_set_mvn_mirror.html"><strong aria-hidden="true">8.4.</strong> Java set mvn mirror</a></li></ol></li><li class="chapter-item "><a href="../../posts/python/python.html"><strong aria-hidden="true">9.</strong> Python</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/python/convert_pesn.html"><strong aria-hidden="true">9.1.</strong> convert pesn</a></li><li class="chapter-item "><a href="../../posts/python/find_remove_dir.html"><strong aria-hidden="true">9.2.</strong> find and remove dir</a></li><li class="chapter-item "><a href="../../posts/python/timing_message.html"><strong aria-hidden="true">9.3.</strong> wechat send message</a></li><li class="chapter-item "><a href="../../posts/python/use_python_openpyxl_package_read_and_edit_excel_files.html"><strong aria-hidden="true">9.4.</strong> Use python openpyxl package read and edit excel files</a></li><li class="chapter-item "><a href="../../posts/python/sanctum_model_yaml.html"><strong aria-hidden="true">9.5.</strong> sanctum model yaml</a></li><li class="chapter-item "><a href="../../posts/python/how_to_detect_objects_on_images_using_the_yolov8_neural_network.html"><strong aria-hidden="true">9.6.</strong> How to detect objects on images using the YOLOv8 neural network</a></li><li class="chapter-item "><a href="../../posts/python/use_huggingface_model.html"><strong aria-hidden="true">9.7.</strong> use huggingface model</a></li></ol></li><li class="chapter-item "><a href="../../posts/go/go.html"><strong aria-hidden="true">10.</strong> Go</a></li><li class="chapter-item "><a href="../../posts/javascript/js.html"><strong aria-hidden="true">11.</strong> Javascript</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/javascript/js_tutorial.html"><strong aria-hidden="true">11.1.</strong> js tutorial</a></li><li class="chapter-item "><a href="../../posts/javascript/js_tutorial_map.html"><strong aria-hidden="true">11.2.</strong> ja map</a></li><li class="chapter-item "><a href="../../posts/javascript/js_tutorial_math.html"><strong aria-hidden="true">11.3.</strong> js math</a></li><li class="chapter-item "><a href="../../posts/javascript/js_tutorial_object.html"><strong aria-hidden="true">11.4.</strong> js object</a></li><li class="chapter-item "><a href="../../posts/javascript/js_tutorial_set.html"><strong aria-hidden="true">11.5.</strong> js set</a></li><li class="chapter-item "><a href="../../posts/javascript/single_thread_and_asynchronous.html"><strong aria-hidden="true">11.6.</strong> single thread and asynchronous</a></li><li class="chapter-item "><a href="../../posts/javascript/this.html"><strong aria-hidden="true">11.7.</strong> js this</a></li><li class="chapter-item "><a href="../../posts/javascript/js_implment_aes.html"><strong aria-hidden="true">11.8.</strong> js implment aes</a></li><li class="chapter-item "><a href="../../posts/javascript/getting_started_with_ajax.html"><strong aria-hidden="true">11.9.</strong> getting started with ajax</a></li><li class="chapter-item "><a href="../../posts/javascript/BinarySearchTree.html"><strong aria-hidden="true">11.10.</strong> binary search tree</a></li><li class="chapter-item "><a href="../../posts/javascript/goole_zx.html"><strong aria-hidden="true">11.11.</strong> goole zx</a></li><li class="chapter-item "><a href="../../posts/javascript/es6.html"><strong aria-hidden="true">11.12.</strong> es6</a></li></ol></li><li class="chapter-item "><a href="../../posts/ruby/ruby.html"><strong aria-hidden="true">12.</strong> Ruby</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ruby/rails_setup_env.html"><strong aria-hidden="true">12.1.</strong> ruby on rails setup environment</a></li><li class="chapter-item "><a href="../../posts/ruby/learn_ruby.html"><strong aria-hidden="true">12.2.</strong> learn ruby</a></li><li class="chapter-item "><a href="../../posts/ruby/ruby_note.html"><strong aria-hidden="true">12.3.</strong> Ruby Note</a></li><li class="chapter-item "><a href="../../posts/ruby/setup_ruby_for_ctf.html"><strong aria-hidden="true">12.4.</strong> Setup ruby for CTF</a></li></ol></li><li class="chapter-item "><a href="../../posts/react/react.html"><strong aria-hidden="true">13.</strong> React</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/react/react_life_cycle.html"><strong aria-hidden="true">13.1.</strong> react life cycle</a></li><li class="chapter-item "><a href="../../posts/react/react_router.html"><strong aria-hidden="true">13.2.</strong> react router</a></li><li class="chapter-item "><a href="../../posts/react/react_this.html"><strong aria-hidden="true">13.3.</strong> react this</a></li><li class="chapter-item "><a href="../../posts/react/react_interviw.html"><strong aria-hidden="true">13.4.</strong> react interview</a></li><li class="chapter-item "><a href="../../posts/react/important_react_interview.html"><strong aria-hidden="true">13.5.</strong> important react interview</a></li><li class="chapter-item "><a href="../../posts/react/react_quick_reference.html"><strong aria-hidden="true">13.6.</strong> react quick reference</a></li><li class="chapter-item "><a href="../../posts/react/redux_quick_reference.html"><strong aria-hidden="true">13.7.</strong> redux quick reference</a></li></ol></li><li class="chapter-item "><a href="../../posts/vue/vue.html"><strong aria-hidden="true">14.</strong> Vue</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/vue/vue_ajax.html"><strong aria-hidden="true">14.1.</strong> vue ajax</a></li></ol></li><li class="chapter-item "><a href="../../posts/angular/angular.html"><strong aria-hidden="true">15.</strong> Angular</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/angular/controller_communication.html"><strong aria-hidden="true">15.1.</strong> controller communication</a></li><li class="chapter-item "><a href="../../posts/angular/creating_custom_directives.html"><strong aria-hidden="true">15.2.</strong> creating custom directives</a></li><li class="chapter-item "><a href="../../posts/angular/directive_notes.html"><strong aria-hidden="true">15.3.</strong> directive notes</a></li><li class="chapter-item "><a href="../../posts/angular/directive_communication.html"><strong aria-hidden="true">15.4.</strong> directive communication</a></li><li class="chapter-item "><a href="../../posts/angular/post_params.html"><strong aria-hidden="true">15.5.</strong> post params</a></li><li class="chapter-item "><a href="../../posts/angular/read_json_angular.html"><strong aria-hidden="true">15.6.</strong> read json angular</a></li><li class="chapter-item "><a href="../../posts/angular/same_route_reload.html"><strong aria-hidden="true">15.7.</strong> same route reload</a></li></ol></li><li class="chapter-item "><a href="../../posts/css/css.html"><strong aria-hidden="true">16.</strong> Css</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/css/use_css_media.html"><strong aria-hidden="true">16.1.</strong> use css media</a></li></ol></li><li class="chapter-item expanded "><a href="../../posts/php/php.html"><strong aria-hidden="true">17.</strong> Php</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/php/for_php_string_implment_some_extemtion_functions.html"><strong aria-hidden="true">17.1.</strong> for php string implment some extemtion functions</a></li><li class="chapter-item expanded "><a href="../../posts/php/php_cheatsheet.html" class="active"><strong aria-hidden="true">17.2.</strong> PHP cheatsheet</a></li></ol></li><li class="chapter-item "><a href="../../posts/windows/windows.html"><strong aria-hidden="true">18.</strong> Windows</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/windows/windows.html"><strong aria-hidden="true">18.1.</strong> Windows</a></li><li class="chapter-item "><a href="../../posts/windows/windows10_use_powershell_dedup_redundent_path.html"><strong aria-hidden="true">18.2.</strong> Windows10 use PowerShell dedup redundent PATH</a></li></ol></li><li class="chapter-item "><a href="../../posts/leetcode/leetcode.html"><strong aria-hidden="true">19.</strong> Leetcode</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/leetcode/rust_leetcode.html"><strong aria-hidden="true">19.1.</strong> rust leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_codewar.html"><strong aria-hidden="true">19.2.</strong> rust codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/swift_codewar.html"><strong aria-hidden="true">19.3.</strong> swift codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/js_leetcode.html"><strong aria-hidden="true">19.4.</strong> js leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/java_leetcode.html"><strong aria-hidden="true">19.5.</strong> java leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_huawei.html"><strong aria-hidden="true">19.6.</strong> huawei test</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_utils.html"><strong aria-hidden="true">19.7.</strong> rust common functions</a></li><li class="chapter-item "><a href="../../posts/leetcode/olympiad_training.html"><strong aria-hidden="true">19.8.</strong> Computer olympiad training</a></li></ol></li><li class="chapter-item "><a href="../../posts/ctf/CTF.html"><strong aria-hidden="true">20.</strong> CTF</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ctf/CTF_Note.html"><strong aria-hidden="true">20.1.</strong> CTF Note</a></li><li class="chapter-item "><a href="../../posts/ctf/0.1_Web.html"><strong aria-hidden="true">20.2.</strong> Web</a></li><li class="chapter-item "><a href="../../posts/ctf/4.1_Misc.html"><strong aria-hidden="true">20.3.</strong> Misc</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">20.4.</strong> PWN</a></li><li class="chapter-item "><a href="../../posts/ctf/3.1_Crypto.html"><strong aria-hidden="true">20.5.</strong> Crypto</a></li><li class="chapter-item "><a href="../../posts/ctf/3.4_RSA_note.html"><strong aria-hidden="true">20.6.</strong> Rsa attack</a></li><li class="chapter-item "><a href="../../posts/ctf/3.5_Base64.html"><strong aria-hidden="true">20.7.</strong> Base64</a></li><li class="chapter-item "><a href="../../posts/ctf/0.0_SQL Injection Cheatsheet.html"><strong aria-hidden="true">20.8.</strong> SQL Injection Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/ctf/1.1_SQL_injection.html"><strong aria-hidden="true">20.9.</strong> SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.2_SQL_injection_UNION_attacks.html"><strong aria-hidden="true">20.10.</strong> SQL Injection UNION attacks</a></li><li class="chapter-item "><a href="../../posts/ctf/1.3_Blind SQL injection.html"><strong aria-hidden="true">20.11.</strong> Blind SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.4_Code Injection.html"><strong aria-hidden="true">20.12.</strong> Code Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.5_SSRF.html"><strong aria-hidden="true">20.13.</strong> SSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.6_OS command injection.html"><strong aria-hidden="true">20.14.</strong> OS command injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.7_Local file inclusion.html"><strong aria-hidden="true">20.15.</strong> Local file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.8_Remote file inclusion.html"><strong aria-hidden="true">20.16.</strong> Remote file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.9_CSRFm.html"><strong aria-hidden="true">20.17.</strong> CSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.10_NoSQL injection.html"><strong aria-hidden="true">20.18.</strong> NoSQL injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.11_JSON injection.html"><strong aria-hidden="true">20.19.</strong> JSON injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.12_CTF_Web_SQL_Note.html"><strong aria-hidden="true">20.20.</strong> CTF Web SQL Note</a></li><li class="chapter-item "><a href="../../posts/ctf/2.1_XXE.html"><strong aria-hidden="true">20.21.</strong> XXE</a></li><li class="chapter-item "><a href="../../posts/ctf/2.2_XSS.html"><strong aria-hidden="true">20.22.</strong> XSS</a></li><li class="chapter-item "><a href="../../posts/ctf/2.3_Upload File.html"><strong aria-hidden="true">20.23.</strong> Upload File</a></li><li class="chapter-item "><a href="../../posts/ctf/2.4_serialize_unserialize.html"><strong aria-hidden="true">20.24.</strong> serialize unserialize</a></li><li class="chapter-item "><a href="../../posts/ctf/2.5_Race condition.html"><strong aria-hidden="true">20.25.</strong> Race condition</a></li><li class="chapter-item "><a href="../../posts/ctf/zip_plain_text_attack.html"><strong aria-hidden="true">20.26.</strong> Zip plain text attack</a></li><li class="chapter-item "><a href="../../posts/ctf/3.3_pwn HCTF2016 brop.html"><strong aria-hidden="true">20.27.</strong> pwn HCTF2016 brop</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_patch_defense_skill.html"><strong aria-hidden="true">20.28.</strong> PWN Patch defense skill</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_stack_overflow.html"><strong aria-hidden="true">20.29.</strong> PWN stack overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_heap_overflow.html"><strong aria-hidden="true">20.30.</strong> PWN heap overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_format_string_vulnerability.html"><strong aria-hidden="true">20.31.</strong> PWN Format String Vulnerability</a></li><li class="chapter-item "><a href="../../posts/ctf/kali_linux_tutorials.html"><strong aria-hidden="true">20.32.</strong> Kali linux tutorials</a></li><li class="chapter-item "><a href="../../posts/ctf/google_dorks_2023_lists.html"><strong aria-hidden="true">20.33.</strong> Google Dorks 2023 Lists</a></li><li class="chapter-item "><a href="../../posts/ctf/dvwa_writeup.html"><strong aria-hidden="true">20.34.</strong> DVWA WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/bwapp_writeup.html"><strong aria-hidden="true">20.35.</strong> bWAPP WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/sqlilabs_writeup.html"><strong aria-hidden="true">20.36.</strong> sqlilabs WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/pwnable_kr_challenge.html"><strong aria-hidden="true">20.37.</strong> Solutions for pwnable.kr</a></li><li class="chapter-item "><a href="../../posts/ctf/the_periodic_table.html"><strong aria-hidden="true">20.38.</strong> The Periodic Table</a></li><li class="chapter-item "><a href="../../posts/ctf/pwntools_cheatsheet.html"><strong aria-hidden="true">20.39.</strong> Pwntools Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/ctf/gdb_cheatsheet.html"><strong aria-hidden="true">20.40.</strong> GDB Cheatsheet</a></li></ol></li><li class="chapter-item "><a href="../../posts/iltes/iltes.html"><strong aria-hidden="true">21.</strong> ILTES</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/iltes/iltes_writing.html"><strong aria-hidden="true">21.1.</strong> ILTES Writing</a></li></ol></li></ol>
            </div>
            <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
        </nav>

        <!-- Track and set sidebar scroll position -->
        <script>
            var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
            sidebarScrollbox.addEventListener('click', function(e) {
                if (e.target.tagName === 'A') {
                    sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
                }
            }, { passive: true });
            var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
            sessionStorage.removeItem('sidebar-scroll');
            if (sidebarScrollTop) {
                // preserve sidebar scroll position when navigating via links within sidebar
                sidebarScrollbox.scrollTop = sidebarScrollTop;
            } else {
                // scroll sidebar to current active section when navigating via "next/previous chapter" buttons
                var activeSection = document.querySelector('#sidebar .active');
                if (activeSection) {
                    activeSection.scrollIntoView({ block: 'center' });
                }
            }
        </script>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                                <div id="menu-bar-hover-placeholder"></div>
                <div id="menu-bar" class="menu-bar sticky">
                    <div class="left-buttons">
                        <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                            <i class="fa fa-bars"></i>
                        </button>
                        <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                            <i class="fa fa-paint-brush"></i>
                        </button>
                        <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                            <li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                        </ul>
                        <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                            <i class="fa fa-search"></i>
                        </button>
                    </div>

                    <h1 class="menu-title">Andrew&#x27;s Blog</h1>

                    <div class="right-buttons">
                        <a href="https://gitee.com/dnrops/dnrops" title="Git repository" aria-label="Git repository">
                            <i id="git-repository-button" class="fa fa-github"></i>
                        </a>

                    </div>
                </div>

                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script>
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <h1 id="php-cheatsheet"><a class="header" href="#php-cheatsheet">PHP cheatsheet</a></h1>
<p>This <a href="https://www.php.net/manual/en/">PHP</a> cheat sheet provides a reference for quickly looking up the correct syntax for the code you use most frequently.</p>
<h2 id="getting-started"><a class="header" href="#getting-started">Getting Started</a></h2>
<h3 id="hellophp"><a class="header" href="#hellophp">hello.php</a></h3>
<pre><code>&lt;?php // begin with a PHP open tag.

echo &quot;Hello World\n&quot;;
print(&quot;Hello quickref.me&quot;);

?&gt;
</code></pre>
<p>PHP run command</p>
<pre><code>$ php hello.php
</code></pre>
<h3 id="variables"><a class="header" href="#variables">Variables</a></h3>
<pre><code>$boolean1 = true;
$boolean2 = True;

$int = 12;
$float = 3.1415926;
unset($float);  // Delete variable

$str1 = &quot;How are you?&quot;;
$str2 = 'Fine, thanks';
</code></pre>
<h3 id="strings"><a class="header" href="#strings">Strings</a></h3>
<pre><code>$url = &quot;quickref.me&quot;;
echo &quot;I'm learning PHP at $url&quot;;

// Concatenate strings
echo &quot;I'm learning PHP at &quot; . $url;

$hello = &quot;Hello, &quot;;
$hello .= &quot;World!&quot;;
echo $hello;   # =&gt; Hello, World!
</code></pre>
<h3 id="arrays"><a class="header" href="#arrays">Arrays</a></h3>
<pre><code>$num = [1, 3, 5, 7, 9];
$num[5] = 11;
unset($num[2]);    // Delete variable
print_r($num);     # =&gt; 1 3 7 9 11
echo count($num);  # =&gt; 5
</code></pre>
<h3 id="operators"><a class="header" href="#operators">Operators</a></h3>
<pre><code>$x = 1;
$y = 2;

$sum = $x + $y;
echo $sum;   # =&gt; 3
</code></pre>
<h3 id="include"><a class="header" href="#include">Include</a></h3>
<h4 id="varsphp"><a class="header" href="#varsphp">vars.php</a></h4>
<pre><code>&lt;?php // begin with a PHP open tag.
$fruit = 'apple';
echo &quot;I was imported&quot;;
return 'Anything you like.';
?&gt;
</code></pre>
<h4 id="testphp"><a class="header" href="#testphp">test.php</a></h4>
<pre><code>&lt;?php
include 'vars.php';
echo $fruit . &quot;\n&quot;;   # =&gt; apple

/* Same as include,
cause an error if cannot be included*/
require 'vars.php';

// Also works
include('vars.php');
require('vars.php');

// Include through HTTP
include 'http://x.com/file.php';

// Include and the return statement
$result = include 'vars.php';
echo $result;  # =&gt; Anything you like.
?&gt;
</code></pre>
<h3 id="functions"><a class="header" href="#functions">Functions</a></h3>
<pre><code>function add($num1, $num2 = 1) {
    return $num1 + $num2;
}
echo add(10);    # =&gt; 11
echo add(10, 5); # =&gt; 15
</code></pre>
<h3 id="comments"><a class="header" href="#comments">Comments</a></h3>
<pre><code># This is a one line shell-style comment

// This is a one line c++ style comment

/* This is a multi line comment
   yet another line of comment */
</code></pre>
<h3 id="constants"><a class="header" href="#constants">Constants</a></h3>
<pre><code>const MY_CONST = &quot;hello&quot;;

echo MY_CONST;   # =&gt; hello

# =&gt; MY_CONST is: hello
echo 'MY_CONST is: ' . MY_CONST;
</code></pre>
<h3 id="classes"><a class="header" href="#classes">Classes</a></h3>
<pre><code>class Student {
    public function __construct($name) {
        $this-&gt;name = $name;
    }
}
$alex = new Student(&quot;Alex&quot;);
</code></pre>
<h3 id="boolean"><a class="header" href="#boolean">Boolean</a></h3>
<pre><code>$boolean1 = true;
$boolean2 = TRUE;
$boolean3 = false;
$boolean4 = FALSE;

$boolean5 = (boolean) 1;   # =&gt; true
$boolean6 = (boolean) 0;   # =&gt; false
</code></pre>
<p>Boolean are case-insensitive</p>
<h3 id="integer"><a class="header" href="#integer">Integer</a></h3>
<pre><code>$int1 = 28;    # =&gt; 28
$int2 = -32;   # =&gt; -32
$int3 = 012;   # =&gt; 10 (octal)
$int4 = 0x0F;  # =&gt; 15 (hex)
$int5 = 0b101; # =&gt; 5  (binary)

# =&gt; 2000100000 (decimal, PHP 7.4.0)
$int6 = 2_000_100_000;
</code></pre>
<h3 id="strings-1"><a class="header" href="#strings-1">Strings</a></h3>
<pre><code>echo 'this is a simple string';
</code></pre>
<h3 id="arrays-1"><a class="header" href="#arrays-1">Arrays</a></h3>
<pre><code>$arr = array(&quot;hello&quot;, &quot;world&quot;, &quot;!&quot;);
</code></pre>
<h3 id="float-double"><a class="header" href="#float-double">Float (Double)</a></h3>
<pre><code>$float1 = 1.234;
$float2 = 1.2e7;
$float3 = 7E-10;

$float4 = 1_234.567;  // as of PHP 7.4.0
var_dump($float4);    // float(1234.567)

$float5 = 1 + &quot;10.5&quot;;   # =&gt; 11.5
$float6 = 1 + &quot;-1.3e3&quot;; # =&gt; -1299
</code></pre>
<h3 id="null"><a class="header" href="#null">Null</a></h3>
<pre><code>$a = null;
$b = 'Hello php!';
echo $a ?? 'a is unset'; # =&gt; a is unset
echo $b ?? 'b is unset'; # =&gt; Hello php

$a = array();
$a == null    # =&gt; true
$a === null   # =&gt; false
is_null($a)   # =&gt; false
</code></pre>
<h3 id="iterables"><a class="header" href="#iterables">Iterables</a></h3>
<pre><code>function bar(): iterable {
    return [1, 2, 3];
}
function gen(): iterable {
    yield 1;
    yield 2;
    yield 3;
}
foreach (bar() as $value) {
    echo $value;   # =&gt; 123
}
</code></pre>
<h3 id="string"><a class="header" href="#string">String</a></h3>
<pre><code># =&gt; '$String'
$sgl_quotes = '$String';

# =&gt; 'This is a $String.'
$dbl_quotes = &quot;This is a $sgl_quotes.&quot;;

# =&gt; a 	 tab character.
$escaped   = &quot;a \t tab character.&quot;;

# =&gt; a slash and a t: \t
$unescaped = 'a slash and a t: \t';
</code></pre>
<h3 id="multi-line"><a class="header" href="#multi-line">Multi-line</a></h3>
<pre><code>$str = &quot;foo&quot;;

// Uninterpolated multi-liners
$nowdoc = &lt;&lt;&lt;'END'
Multi line string
$str
END;

// Will do string interpolation
$heredoc = &lt;&lt;&lt;END
Multi line
$str
END;
</code></pre>
<h3 id="manipulation"><a class="header" href="#manipulation">Manipulation</a></h3>
<pre><code>$s = &quot;Hello Phper&quot;;
echo strlen($s);       # =&gt; 11

echo substr($s, 0, 3); # =&gt; Hel
echo substr($s, 1);    # =&gt; ello Phper
echo substr($s, -4, 3);# =&gt; hpe

echo strtoupper($s);   # =&gt; HELLO PHPER
echo strtolower($s);   # =&gt; hello phper

echo strpos($s, &quot;l&quot;);      # =&gt; 2
var_dump(strpos($s, &quot;L&quot;)); # =&gt; false
</code></pre>
<h3 id="defining"><a class="header" href="#defining">Defining</a></h3>
<pre><code>$a1 = [&quot;hello&quot;, &quot;world&quot;, &quot;!&quot;]
$a2 = array(&quot;hello&quot;, &quot;world&quot;, &quot;!&quot;);
$a3 = explode(&quot;,&quot;, &quot;apple,pear,peach&quot;);
</code></pre>
<h4 id="mixed-int-and-string-keys"><a class="header" href="#mixed-int-and-string-keys">Mixed int and string keys</a></h4>
<pre><code>$array = array(
    &quot;foo&quot; =&gt; &quot;bar&quot;,
    &quot;bar&quot; =&gt; &quot;foo&quot;,
    100   =&gt; -100,
    -100  =&gt; 100,
);
var_dump($array);
</code></pre>
<h4 id="short-array-syntax"><a class="header" href="#short-array-syntax">Short array syntax</a></h4>
<pre><code>$array = [
    &quot;foo&quot; =&gt; &quot;bar&quot;,
    &quot;bar&quot; =&gt; &quot;foo&quot;,
];
</code></pre>
<h3 id="multi-array"><a class="header" href="#multi-array">Multi array</a></h3>
<pre><code>$multiArray = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

print_r($multiArray[0][0]) # =&gt; 1
print_r($multiArray[0][1]) # =&gt; 2
print_r($multiArray[0][2]) # =&gt; 3
</code></pre>
<h3 id="multi-type"><a class="header" href="#multi-type">Multi type</a></h3>
<pre><code>$array = array(
    &quot;foo&quot; =&gt; &quot;bar&quot;,
    42    =&gt; 24,
    &quot;multi&quot; =&gt; array(
         &quot;dim&quot; =&gt; array(
             &quot;a&quot; =&gt; &quot;foo&quot;
         )
    )
);

# =&gt; string(3) &quot;bar&quot;
var_dump($array[&quot;foo&quot;]);

# =&gt; int(24)
var_dump($array[42]);

# =&gt;  string(3) &quot;foo&quot;
var_dump($array[&quot;multi&quot;][&quot;dim&quot;][&quot;a&quot;]);
</code></pre>
<h3 id="manipulation-1"><a class="header" href="#manipulation-1">manipulation</a></h3>
<pre><code>$arr = array(5 =&gt; 1, 12 =&gt; 2);
$arr[] = 56;      // Append
$arr[&quot;x&quot;] = 42;   // Add with key
sort($arr);       // Sort
unset($arr[5]);   // Remove
unset($arr);      // Remove all
</code></pre>
<p>See: <a href="https://www.php.net/manual/en/ref.array.php">Array Functions</a></p>
<h3 id="indexing-iteration"><a class="header" href="#indexing-iteration">Indexing iteration</a></h3>
<pre><code>$array = array('a', 'b', 'c');
$count = count($array);

for ($i = 0; $i &lt; $count; $i++) {
    echo &quot;i:{$i}, v:{$array[$i]}\n&quot;;
}
</code></pre>
<h3 id="value-iteration"><a class="header" href="#value-iteration">Value iteration</a></h3>
<pre><code>$colors = array('red', 'blue', 'green');

foreach ($colors as $color) {
    echo &quot;Do you like $color?\n&quot;;
}
</code></pre>
<h3 id="key-iteration"><a class="header" href="#key-iteration">Key iteration</a></h3>
<pre><code>$arr = [&quot;foo&quot; =&gt; &quot;bar&quot;, &quot;bar&quot; =&gt; &quot;foo&quot;];

foreach ( $arr as $key =&gt; $value )
{
  	echo &quot;key: &quot; . $key . &quot;\n&quot;;
    echo &quot;val: {$arr[$key]}\n&quot;;
}
</code></pre>
<h3 id="concatenate-arrays"><a class="header" href="#concatenate-arrays">Concatenate arrays</a></h3>
<pre><code>$a = [1, 2];
$b = [3, 4];

// PHP 7.4 later
# =&gt; [1, 2, 3, 4]
$result = [...$a, ...$b];
</code></pre>
<h3 id="into-functions"><a class="header" href="#into-functions">Into functions</a></h3>
<pre><code>$array = [1, 2];

function foo(int $a, int $b) {
	echo $a; # =&gt; 1
  	echo $b; # =&gt; 2
}
foo(...$array);
</code></pre>
<h3 id="splat-operator"><a class="header" href="#splat-operator">Splat Operator</a></h3>
<pre><code>function foo($first, ...$other) {
	var_dump($first); # =&gt; a
  	var_dump($other); # =&gt; ['b', 'c']
}
foo('a', 'b', 'c' /*, ...*/ );
// or
function foo($first, string ...$other){}
</code></pre>
<h3 id="arithmetic"><a class="header" href="#arithmetic">Arithmetic</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>+</code></th><th>Addition</th></tr></thead><tbody>
<tr><td><code>-</code></td><td>Subtraction</td></tr>
<tr><td><code>*</code></td><td>Multiplication</td></tr>
<tr><td><code>/</code></td><td>Division</td></tr>
<tr><td><code>%</code></td><td>Modulo</td></tr>
<tr><td><code>**</code></td><td>Exponentiation</td></tr>
</tbody></table>
</div>
<h3 id="assignment"><a class="header" href="#assignment">Assignment</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>a += b</code></th><th>Same as <code>a = a + b</code></th></tr></thead><tbody>
<tr><td><code>a -= b</code></td><td>Same as <code>a = a – b</code></td></tr>
<tr><td><code>a *= b</code></td><td>Same as <code>a = a * b</code></td></tr>
<tr><td><code>a /= b</code></td><td>Same as <code>a = a / b</code></td></tr>
<tr><td><code>a %= b</code></td><td>Same as <code>a = a % b</code></td></tr>
</tbody></table>
</div>
<h3 id="comparison"><a class="header" href="#comparison">Comparison</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>==</code></th><th>Equal</th></tr></thead><tbody>
<tr><td><code>===</code></td><td>Identical</td></tr>
<tr><td><code>!=</code></td><td>Not equal</td></tr>
<tr><td><code>&lt;&gt;</code></td><td>Not equal</td></tr>
<tr><td><code>!==</code></td><td>Not identical</td></tr>
<tr><td><code>&lt;</code></td><td>Less than</td></tr>
<tr><td><code>&gt;</code></td><td>Greater than</td></tr>
<tr><td><code>&lt;=</code></td><td>Less than or equal</td></tr>
<tr><td><code>&gt;=</code></td><td>Greater than or equal</td></tr>
<tr><td><code>&lt;=&gt;</code></td><td>Less than/equal/greater than</td></tr>
</tbody></table>
</div>
<h3 id="logical"><a class="header" href="#logical">Logical</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>and</code></th><th>And</th></tr></thead><tbody>
<tr><td><code>or</code></td><td>Or</td></tr>
<tr><td><code>xor</code></td><td>Exclusive or</td></tr>
<tr><td><code>!</code></td><td>Not</td></tr>
<tr><td><code>&amp;&amp;</code></td><td>And</td></tr>
<tr><td>`</td><td></td></tr>
</tbody></table>
</div>
<h3 id="arithmetic-1"><a class="header" href="#arithmetic-1">Arithmetic</a></h3>
<pre><code>// Arithmetic
$sum        = 1 + 1; // 2
$difference = 2 - 1; // 1
$product    = 2 * 2; // 4
$quotient   = 2 / 1; // 2

// Shorthand arithmetic
$num = 0;
$num += 1;       // Increment $num by 1
echo $num++;     // Prints 1 (increments after evaluation)
echo ++$num;     // Prints 3 (increments before evaluation)
$num /= $float;  // Divide and assign the quotient to $num
</code></pre>
<h3 id="bitwise"><a class="header" href="#bitwise">Bitwise</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>&amp;</code></th><th>And</th></tr></thead><tbody>
<tr><td>`</td><td>`</td></tr>
<tr><td><code>^</code></td><td>Xor (exclusive or)</td></tr>
<tr><td><code>~</code></td><td>Not</td></tr>
<tr><td><code>&lt;&lt;</code></td><td>Shift left</td></tr>
<tr><td><code>&gt;&gt;</code></td><td>Shift right</td></tr>
</tbody></table>
</div>
<h3 id="if-elseif-else"><a class="header" href="#if-elseif-else">If elseif else</a></h3>
<pre><code>$a = 10;
$b = 20;

if ($a &gt; $b) {
    echo &quot;a is bigger than b&quot;;
} elseif ($a == $b) {
    echo &quot;a is equal to b&quot;;
} else {
    echo &quot;a is smaller than b&quot;;
}
</code></pre>
<h3 id="switch"><a class="header" href="#switch">Switch</a></h3>
<pre><code>$x = 0;
switch ($x) {
    case '0':
        print &quot;it's zero&quot;;
        break;
    case 'two':
    case 'three':
        // do something
        break;
    default:
        // do something
}
</code></pre>
<h3 id="ternary-operator"><a class="header" href="#ternary-operator">Ternary operator</a></h3>
<pre><code># =&gt; Does
print (false ? 'Not' : 'Does');

$x = false;
# =&gt; Does
print($x ?: 'Does');

$a = null;
$b = 'Does print';
# =&gt; a is unset
echo $a ?? 'a is unset';
# =&gt; print
echo $b ?? 'b is unset';
</code></pre>
<h3 id="match"><a class="header" href="#match">Match</a></h3>
<pre><code>$statusCode = 500;
$message = match($statusCode) {
  200, 300 =&gt; null,
  400 =&gt; 'not found',
  500 =&gt; 'server error',
  default =&gt; 'known status code',
};
echo $message; # =&gt; server error
</code></pre>
<p>See: <a href="https://www.php.net/manual/en/control-structures.match.php">Match</a></p>
<h3 id="match-expressions"><a class="header" href="#match-expressions">Match expressions</a></h3>
<pre><code>$age = 23;

$result = match (true) {
    $age &gt;= 65 =&gt; 'senior',
    $age &gt;= 25 =&gt; 'adult',
    $age &gt;= 18 =&gt; 'young adult',
    default =&gt; 'kid',
};

echo $result; # =&gt; young adult
</code></pre>
<h3 id="while"><a class="header" href="#while">while</a></h3>
<pre><code>$i = 1;
# =&gt; 12345
while ($i &lt;= 5) {
    echo $i++;
}
</code></pre>
<h3 id="do-while"><a class="header" href="#do-while">do while</a></h3>
<pre><code>$i = 1;
# =&gt; 12345
do {
    echo $i++;
} while ($i &lt;= 5);
</code></pre>
<h3 id="for-i"><a class="header" href="#for-i">for i</a></h3>
<pre><code># =&gt; 12345
for ($i = 1; $i &lt;= 5; $i++) {
    echo $i;
}
</code></pre>
<h3 id="break"><a class="header" href="#break">break</a></h3>
<pre><code># =&gt; 123
for ($i = 1; $i &lt;= 5; $i++) {
    if ($i === 4) {
        break;
    }
    echo $i;
}
</code></pre>
<h3 id="continue"><a class="header" href="#continue">continue</a></h3>
<pre><code># =&gt; 1235
for ($i = 1; $i &lt;= 5; $i++) {
    if ($i === 4) {
        continue;
    }
    echo $i;
}
</code></pre>
<h3 id="foreach"><a class="header" href="#foreach">foreach</a></h3>
<pre><code>$a = ['foo' =&gt; 1, 'bar' =&gt; 2];
# =&gt; 12
foreach ($a as $k) {
    echo $k;
}
</code></pre>
<h2 id="php-functions"><a class="header" href="#php-functions">PHP Functions</a></h2>
<h3 id="returning-values"><a class="header" href="#returning-values">Returning values</a></h3>
<pre><code>function square($x)
{
    return $x * $x;
}

echo square(4);  # =&gt; 16
</code></pre>
<h3 id="return-types"><a class="header" href="#return-types">Return types</a></h3>
<pre><code>// Basic return type declaration
function sum($a, $b): float {/*...*/}
function get_item(): string {/*...*/}

class C {}
// Returning an object
function getC(): C { return new C; }
</code></pre>
<h3 id="nullable-return-types"><a class="header" href="#nullable-return-types">Nullable return types</a></h3>
<pre><code>// Available in PHP 7.1
function nullOrString(int $v) : ?string
{
    return $v % 2 ? &quot;odd&quot; : null;
}
echo nullOrString(3);       # =&gt; odd
var_dump(nullOrString(4));  # =&gt; NULL
</code></pre>
<p>See: <a href="https://www.php.net/manual/en/migration71.new-features.php">Nullable types</a></p>
<h3 id="void-functions"><a class="header" href="#void-functions">Void functions</a></h3>
<pre><code>// Available in PHP 7.1
function voidFunction(): void
{
	echo 'Hello';
	return;
}

voidFunction();  # =&gt; Hello
</code></pre>
<h3 id="variable-functions"><a class="header" href="#variable-functions">Variable functions</a></h3>
<pre><code>function bar($arg = '')
{
    echo &quot;In bar(); arg: '$arg'.\n&quot;;
}

$func = 'bar';
$func('test'); # =&gt; In bar(); arg: test
</code></pre>
<h3 id="anonymous-functions"><a class="header" href="#anonymous-functions">Anonymous functions</a></h3>
<pre><code>$greet = function($name)
{
    printf(&quot;Hello %s\r\n&quot;, $name);
};

$greet('World'); # =&gt; Hello World
$greet('PHP');   # =&gt; Hello PHP
</code></pre>
<h3 id="recursive-functions"><a class="header" href="#recursive-functions">Recursive functions</a></h3>
<pre><code>function recursion($x)
{
    if ($x &lt; 5) {
        echo &quot;$x&quot;;
        recursion($x + 1);
    }
}
recursion(1);  # =&gt; 1234
</code></pre>
<h3 id="default-parameters"><a class="header" href="#default-parameters">Default parameters</a></h3>
<pre><code>function coffee($type = &quot;cappuccino&quot;)
{
    return &quot;Making a cup of $type.\n&quot;;
}
# =&gt; Making a cup of cappuccino.
echo coffee();
# =&gt; Making a cup of .
echo coffee(null);
# =&gt; Making a cup of espresso.
echo coffee(&quot;espresso&quot;);
</code></pre>
<h3 id="arrow-functions"><a class="header" href="#arrow-functions">Arrow Functions</a></h3>
<pre><code>$y = 1;

$fn1 = fn($x) =&gt; $x + $y;

// equivalent to using $y by value:
$fn2 = function ($x) use ($y) {
    return $x + $y;
};
echo $fn1(5);   # =&gt; 6
echo $fn2(5);   # =&gt; 6
</code></pre>
<h2 id="php-classes"><a class="header" href="#php-classes">PHP Classes</a></h2>
<h3 id="constructor"><a class="header" href="#constructor">Constructor</a></h3>
<pre><code>class Student {
    public function __construct($name) {
        $this-&gt;name = $name;
    }
  	public function print() {
        echo &quot;Name: &quot; . $this-&gt;name;
    }
}
$alex = new Student(&quot;Alex&quot;);
$alex-&gt;print();    # =&gt; Name: Alex
</code></pre>
<h3 id="inheritance"><a class="header" href="#inheritance">Inheritance</a></h3>
<pre><code>class ExtendClass extends SimpleClass
{
    // Redefine the parent method
    function displayVar()
    {
        echo &quot;Extending class\n&quot;;
        parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended-&gt;displayVar();
</code></pre>
<h3 id="classes-variables"><a class="header" href="#classes-variables">Classes variables</a></h3>
<pre><code>class MyClass
{
    const MY_CONST       = 'value';
    static $staticVar    = 'static';

    // Visibility
    public static $var1  = 'pubs';

    // Class only
    private static $var2 = 'pris';

    // The class and subclasses
    protected static $var3 = 'pros';

    // The class and subclasses
    protected $var6      = 'pro';

    // The class only
    private $var7        = 'pri';
}
</code></pre>
<p>Access statically</p>
<pre><code>echo MyClass::MY_CONST;   # =&gt; value
echo MyClass::$staticVar; # =&gt; static
</code></pre>
<h3 id="magic-methods"><a class="header" href="#magic-methods">Magic Methods</a></h3>
<pre><code>class MyClass
{
    // Object is treated as a String
    public function __toString()
    {
        return $property;
    }
    // opposite to __construct()
    public function __destruct()
    {
        print &quot;Destroying&quot;;
    }
}
</code></pre>
<h3 id="interface"><a class="header" href="#interface">Interface</a></h3>
<pre><code>interface Foo
{
    public function doSomething();
}
interface Bar
{
    public function doSomethingElse();
}
class Cls implements Foo, Bar
{
    public function doSomething() {}
    public function doSomethingElse() {}
}
</code></pre>
<h2 id="miscellaneous"><a class="header" href="#miscellaneous">Miscellaneous</a></h2>
<h3 id="basic-error-handling"><a class="header" href="#basic-error-handling">Basic error handling</a></h3>
<pre><code>try {
    // Do something
} catch (Exception $e) {
    // Handle exception
} finally {
    echo &quot;Always print!&quot;;
}
</code></pre>
<h3 id="exception-in-php-80"><a class="header" href="#exception-in-php-80">Exception in PHP 8.0</a></h3>
<pre><code>$nullableValue = null;

try {
	$value = $nullableValue ?? throw new InvalidArgumentException();
} catch (InvalidArgumentException) { // Variable is optional
    // Handle my exception
    echo &quot;print me!&quot;;
}
</code></pre>
<h3 id="custom-exception"><a class="header" href="#custom-exception">Custom exception</a></h3>
<pre><code>class MyException extends Exception {
    // do something
}
</code></pre>
<p>Usage</p>
<pre><code>try {
    $condition = true;
    if ($condition) {
        throw new MyException('bala');
    }
} catch (MyException $e) {
    // Handle my exception
}
</code></pre>
<h3 id="nullsafe-operator"><a class="header" href="#nullsafe-operator">Nullsafe Operator</a></h3>
<pre><code>// As of PHP 8.0.0, this line:
$result = $repo?-&gt;getUser(5)?-&gt;name;

// Equivalent to the following code:
if (is_null($repo)) {
    $result = null;
} else {
    $user = $repository-&gt;getUser(5);
    if (is_null($user)) {
        $result = null;
    } else {
        $result = $user-&gt;name;
    }
}
</code></pre>
<p>See also: <a href="https://wiki.php.net/rfc/nullsafe_operator">Nullsafe Operator</a></p>
<h3 id="regular-expressions"><a class="header" href="#regular-expressions">Regular expressions</a></h3>
<pre><code>$str = &quot;Visit Quickref.me&quot;;
echo preg_match(&quot;/qu/i&quot;, $str); # =&gt; 1
</code></pre>
<p>See: <a href="https://quickref.me/regex#regex-in-php">Regex in PHP</a></p>
<h3 id="fopen-mode"><a class="header" href="#fopen-mode">fopen() mode</a></h3>
<div class="table-wrapper"><table><thead><tr><th><code>r</code></th><th>Read</th></tr></thead><tbody>
<tr><td><code>r+</code></td><td>Read and write, prepend</td></tr>
<tr><td><code>w</code></td><td>Write, truncate</td></tr>
<tr><td><code>w+</code></td><td>Read and write, truncate</td></tr>
<tr><td><code>a</code></td><td>Write, append</td></tr>
<tr><td><code>a+</code></td><td>Read and write, append</td></tr>
</tbody></table>
</div>
<h3 id="runtime-defined-constants"><a class="header" href="#runtime-defined-constants">Runtime defined Constants</a></h3>
<pre><code>define(&quot;CURRENT_DATE&quot;, date('Y-m-d'));

// One possible representation
echo CURRENT_DATE;   # =&gt; 2021-01-05

# =&gt; CURRENT_DATE is: 2021-01-05
echo 'CURRENT_DATE is: ' . CURRENT_DATE;
</code></pre>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                            <a rel="prev" href="../../posts/php/for_php_string_implment_some_extemtion_functions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>

                            <a rel="next" href="../../posts/windows/windows.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                    <a rel="prev" href="../../posts/php/for_php_string_implment_some_extemtion_functions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>

                    <a rel="next" href="../../posts/windows/windows.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
            </nav>

        </div>



        <script>
            window.playground_line_numbers = true;
        </script>

        <script>
            window.playground_copyable = true;
        </script>

        <script src="../../ace.js"></script>
        <script src="../../editor.js"></script>
        <script src="../../mode-rust.js"></script>
        <script src="../../theme-dawn.js"></script>
        <script src="../../theme-tomorrow_night.js"></script>

        <script src="../../elasticlunr.min.js"></script>
        <script src="../../mark.min.js"></script>
        <script src="../../searcher.js"></script>

        <script src="../../clipboard.min.js"></script>
        <script src="../../highlight.js"></script>
        <script src="../../book.js"></script>

        <!-- Custom JS scripts -->
        <script src="../../src/js/custom.js"></script>


    </div>
    </body>
</html>
